package br.ufrn.cerescaico.sepe.bo;

import br.ufrn.cerescaico.sepe.Sepe;
import br.ufrn.cerescaico.sepe.beans.Email;
import br.ufrn.cerescaico.sepe.dao.Dao;
import br.ufrn.cerescaico.sepe.dao.EmailDao;
import br.ufrn.cerescaico.sepe.dao.util.DataAccessLayerException;
import br.ufrn.cerescaico.sepe.email.MailManager;
import br.ufrn.cerescaico.sepe.email.MailMessage;
import org.apache.log4j.Logger;

/**
 * Classe de negócio do bean email do sistema Sepe.
 * @author Taciano Morais Silva
 * @version 16/08/2010, 21h23m
 * @since 16/08/2010, 21h23m
 */
public class EmailBO extends AbstractBO {

    /**
     * Logger.
     */
    private Logger logger = Logger.getLogger(EmailBO.class);

    /**
     *
     * @param Sepe
     */
    public EmailBO(Sepe Sepe) {
        super(Sepe);
    }

    /**
     * Incluir um e-mail no sistema.
     * @param email O e-mail a ser incluído.
     */
    public void incluir(Email email) throws SepeException {
        verificarNull(email);
        try {
            Dao<Email> dao = new EmailDao();
            dao.create(email);
        } catch (DataAccessLayerException ex) {
            logger.error(ex.getMessage(), ex);
            throw new SepeException("erro.email.bo.incluir", ex);
        }
    }

    private void verificarNull(Object obj) throws SepeException {
        if (obj == null) {
            throw new SepeException("erro.email.bo.null");
        }
    }

    /**
     * Envia um e-mail e inclui no sistema.
     * @param email O e-mail a ser enviado e incluído.
     */
    public void enviar(Email email) throws SepeException {
        verificarNull(email);
        MailMessage mailMessage = getMailMessage(email);
        MailManager m = new MailManager();

        try {
            m.send(mailMessage);
            incluir(email);
        } catch (Exception ex) {
            logger.error("erro.email.bo.incluir.email.naoenviado", ex);
            throw new SepeException("erro.email.bo.incluir.email.naoenviado");
        }
    }

}
